<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/10/18 0018
 * Time: 10:52
 */

namespace Admin\Model;

class Goods_classModel extends CommonModel{

    //获取某个分类的子分类
    public function getChildren($id){
        //先获取所有的分类信息
        $data=$this->select();
        // dump($id);die;
        //对获取的信息进去格式化
        $list=$this->getTree($data,$id,1,false);//为false，查询单一数据,清除缓存
        // dump($list);die;

        foreach ($list as $key=>$value){
            $tree[]=$value['id'];
        }
        return $tree;
    }


    //获得格式化的数信息
    public function getCateTree($id=0){
        $data=$this->select();
        //dump($data);die;
        //对获取的信息进行格式化
        $list =$this-> getTree($data,$id);

        return $list;
    }

    //格式化分类信息  无限极分类
    public function getTree($data,$id=0,$lev=1,$iscache=true){//为true查询所有数据
        static $list = array();
        //根据参数决定是否需要重置
        if(!$iscache){
            $list=array();
        }
        foreach($data as $key=>$value){
            if($value['parent_class_id']==$id){
                $value['lev'] = $lev;
                $value['name'] = $value['parent_class_id']==0?$value['name']."--（商品分类_id".$value['class_id']."）":$value['name'];
                $list[]=$value;
                //使用递归方法获取分类下的子分类
                $this->getTree($data,$value['class_id'],$lev+1);
            }
        }
        return $list;
        //dump($list);die;
    }

    //删除分类
    public function dels($id){
        //如果删除的分类下有子类不允许删除
        $result = $this->where('parent_class_id='.$id)->find();
        if($result){
            return false;
        }
        return $this->where('id='.$id)->delete();
    }

    //修改
    public function update($data){
        $tree = $this->getCateTree($data['id']);
        $tree[]=array('id'=>$data['id']);
        //如果提交的parent_class_id值等于自己及子分类的某个ID直接不允许修改
        foreach ($data as $key=>$value){
            if($data['parent_class_id']==$value['id']){
                $this->error='不能设置子分类为父分类';
                return false;
            }
        }
        return $this->save($data);
    }


    //获取楼层信息 包括楼层的分类信息以及商品信息
    public function getFloor(){     //--home/index
        //1、获取所有的顶级分类
        $data=$this->where('parent_class_id=0')->select();
//        dump($data);die;
        //根据顶级分类的标识获取二级分类及推荐的二级分类信息
        foreach($data as $key => $value){
            //获取二级分类
            $data[$key]['son']=$this->where('parent_class_id='.$value['id'])->select();
            //获取推荐的二级分类信息
            $data[$key]['recson']=$this->where('isrec=1 and parent_class_id='.$value['id'])->select();
            //根据每一个楼层推荐的二级分类信息获取对应的商品数据
            foreach($data[$key]['recson'] as $k=>$v){
                //$v代表的就是每一个推荐分类信息
                $data[$key]['recson'][$k]['goods']=$this->getGoodsByCateId($v['id']);
                //dump($data);die;
            }
        }
        return $data;
    }

    //根据分类ID标识获取对应的商品信息
    public function getGoodsByCateId($cate_id,$limit=8){
        //1、获取当前分类下面子分类信息
        $children = $this->getChildren($cate_id);
        //2、将当前分类的标识追加到对应的子分类中
        $children[]=$cate_id;
        //3、将$children格式化为字符串的格式目的就是为了使用MySQL中的in语法
        $children=implode(',',$children);
        //4、通过目前的分类信息获取商品数据	--没有被删除的，销售	分类ID在子类中 ，
        $goods=D('Goods')->where(" isdel=1 and is_sale=1 and cate_id in ($children)")->limit($limit)->order("id desc")->select();
        //dump($goods);die;
        return $goods;
    }

}